import random   #引入随机数库，用于生成随机数

# 用于打印输入的参数(方形矩阵) matrix
def display(matrix):
    print("==============================")
    for i in range(len(matrix)):
        print(matrix[i])

# 用于生成 n 维矩阵
def create_matrix(n):
    matrix=[]
    for i in range(n):
        tmp=[]
        for j in range(n):
            tmp.append(random.randint(0,9))
        matrix.append(tmp)
    
    return matrix

# 解决方法
def Solution(matrix):
    n=len(matrix)

    ''' 输入合法校验  '''
    # 输入的矩阵为空
    if n==0:
        return None
    # 输入的矩阵不是方阵
    if len(matrix[0])!=n:
        return None

    '''
        将方阵按对角线分为四个部分，我们使用上边部分遍历

        例：
            [7, 0, 5, 6]
            [9, 0, 9, 6]
            [8, 1, 9, 5]
            [5, 2, 1, 1]
        取
            7, 0, 5
               0
        
        行的遍历范围是 0 <= i < (n+1)>>1
        列的遍历范围是 i <= j <= n-i-1
        旋转90°相当于四个元素互相替换
        上 matrix[i][j] ----> 右 matrix[j][n-i-1] ----> 下 matrix[n-i-1][n-j-1] ----> 左 matirx[n-j-1][i]
    '''
    
    L=(n+1)>>1
    for i in range(L):
        for j in range(i, n-i-1):
            ''' 上下左右四个元素逐个交换，使用两个临时变量 '''
            tmp_1 = matrix[j][n-i-1]
            matrix[j][n-i-1] = matrix[i][j]

            tmp_2 = matrix[n-i-1][n-j-1]
            matrix[n-i-1][n-j-1]=tmp_1

            tmp_1=matrix[n-j-1][i]
            matrix[n-j-1][i]=tmp_2

            matrix[i][j]=tmp_1

    return matrix

def main():
    n=4

    matrix=create_matrix(n)
    display(matrix)
    
    matrix=Solution(matrix)
    display(matrix)

if __name__=="__main__":
    main()